class people:
    def __init__(self,name,age):
        self.name = name
        self.__age = age


    def show(self):
        print("我的名字是：",self.name)
        print("我的年龄是：",self.__age)
    def setAge(self,age):
        if age<0:
            print("年龄不符合")
        else:
            self.__age=age
    def getAge(self):
        # print("我的年龄是：",self.__age)
        return self.__age

llz=people("李立宗",18)
llz.show()

llz.setAge(42)
print(llz.getAge())




# __age私有变量，很好地实现了隐藏，
# 无论是使用age访问，还是__age访问，都无法访问到类内部的__age
# 实现了高级封装
# 如果真的非常必要要访问__age，访问的方式是：对象._people__age
# 访问类内部的私有成员，是非常非常不建议这么做的。


















# class guaishou:
#     def __init__(self,name,weight,height):  
#         #必须包含self参数，初始化
#         print("Hello,准备工作")
#         self.__name = name
#         self.__weight = weight
#         self.__height = height
#         print("Hello 初始化结束")    

#     def show(self):
#         print("Hello ，我来了：")
#         print("我的名字是：",self.__name)
#         print("我的身高是：",self.__weight)
#         print("我的体重是：",self.__height)

#     def getName(self):
#         return self.__name
#     def setName(self,x):
#         self.__name=x


# kulipa=guaishou("苦力怕",80,180)
# kulipa.show()
# # 以下是错误代码，无法访问私有变量
# # 无法从外部访问: 实例变量.__name或者实例变量__name
# # print("我是：",kulipa.__name)
# # print("我身高：",kulipa.height)
# # print("我体重：",kulipa.weight)
# print("我的名字是:",kulipa.getName())
# kulipa.setName("库里怕")
# print("我的名字是:",kulipa.getName())

# print("我的名字是：",kulipa._guaishou__name)
# # 值得注意的是：
# # 1特殊方法、变量：
# # 首尾都是下划线的（类似“__xxx__”）变量，是特殊变量
# # 一般是系统定义的名称，
# # 这种变量是可以直接访问的
# # 一定主要，不要使用首尾都是下划线的变量名，如：__name__、__weight__等形式的变量名。

# # 2保护类型
# # 以下划线开头的
# # 保护类型的成员，只允许类和子类访问，
# # 不能使用“from module import *”导入,
# # 虽然我可以被访问，但是，请把我视为私有变量，不要随意访问

# # 3私有数据访问方式
# # 以双下划线开头的
# # 不能直接访问，通常通过set、get访问
# # 额外注意：实际上，可以通过“对象名._类名__变量名”方式使用（不推荐）